/**
 * 类名：TimeUtil
 * @author hmb
 * 创建日期： 2014-10-3 下午2:50:38
 *
 * 备注：
 * 
 */
package com.erms.util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * @author hmb
 * 
 */
public class TimeUtil {

	public static final String	DEFAULT_FORMAT	= "yyyy-MM-dd HH:mm";
	public static final Locale	DEFAULT_LOCALE	= Locale.SIMPLIFIED_CHINESE;

	/**
	 * 获取当前Unix时间戳（单位：秒），从1970年1月1号至今的秒数（不可用于直接向用户展示）
	 * 
	 * @return Unix时间戳
	 */
	public static int getTimeStamp() {

		return (int) (System.currentTimeMillis() / 1000);
	}

	/**
	 * 获取格式化当地时间
	 * 
	 * @return 返回默认格式的时间"yyyy-MM-dd HH:mm:ss"
	 * @see TimeUtil#getLocalDate(String)
	 */
	public static String getDate() {

		SimpleDateFormat format = new SimpleDateFormat(DEFAULT_FORMAT,
				DEFAULT_LOCALE);
		return format.format(new Date());
	}

	/**
	 * 获取格式化当地时间
	 * 
	 * @param format 形如"yyyy-MM-dd HH:mm:ss"
	 * @return 指定格式的时间字符串
	 */
	public static String getDate(String format) {

		SimpleDateFormat dateFormat = new SimpleDateFormat(format,
				DEFAULT_LOCALE);
		return dateFormat.format(new Date());
	}

	/**
	 * 
	 * @return 当前秒数
	 */
	public static int getSecond() {

		return Calendar.getInstance(DEFAULT_LOCALE).get(Calendar.SECOND);

	}

	/**
	 * 
	 * @return 当前分钟数
	 */
	public static int getMinute() {

		return Calendar.getInstance(DEFAULT_LOCALE).get(Calendar.MINUTE);
	}

	/**
	 * 24小时制
	 * 
	 * @return 当前小时数
	 */
	public static int getHour() {

		return Calendar.getInstance(DEFAULT_LOCALE).get(Calendar.HOUR_OF_DAY);
	}

	/**
	 * 获得星期几，从1计，星期日为7
	 * 
	 * @return 星期几
	 */
	public static int getDayOfWeek() {

		// 星期日为第一天;
		int day = Calendar.getInstance(DEFAULT_LOCALE)
				.get(Calendar.DAY_OF_WEEK);
		// 下面将其转化为星期一为1。。星期日为7
		if (1 == day) { return 7; }
		return day - 1;
	}

	/**
	 * 获得本地本月第几天，从1计
	 * 
	 * @return 当前日期
	 */
	public static int getDayOfMonth() {

		return Calendar.getInstance(DEFAULT_LOCALE).get(Calendar.DAY_OF_MONTH);
	}

	/**
	 * 获得本地当前月份，从1计
	 * 
	 * @return 当前月份
	 */
	public static int getMonth() {

		return Calendar.getInstance(DEFAULT_LOCALE).get(Calendar.MONTH) + 1;// 原来是从0计的
	}

	/**
	 * 获得本地当前年份
	 * 
	 * @return 当前年份
	 */
	public static int getYear() {

		return Calendar.getInstance(DEFAULT_LOCALE).get(Calendar.YEAR);
	}

	/**
	 * Unix时间戳转时间
	 * 
	 * @param time Unix时间戳，从1970年1月1日至今的秒数
	 * @return 默认格式的时间
	 */
	public static String format(int time) {

		SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_FORMAT,
				DEFAULT_LOCALE);

		return dateFormat.format(new Date(time * 1000l));
	}
	public static String formatwithLocalDateTime(int time) {

		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm",
				DEFAULT_LOCALE);
		return dateFormat.format(new Date(time * 1000l));
	}

	/**
	 * Unix时间戳转时间
	 * 
	 * @param time 时间戳，从1970年1月1日至今的秒数
	 * @param format 指定格式，形如"yyyy-MM-dd HH:mm:ss"
	 * @return 指定格式的时间
	 */
	public static String format(int time, String format) {

		SimpleDateFormat dateFormat = new SimpleDateFormat(format,
				DEFAULT_LOCALE);

		return dateFormat.format(new Date(time * 1000l));
	}

	public static Integer format(String time) throws Exception {

		SimpleDateFormat dateFormat = new SimpleDateFormat(DEFAULT_FORMAT,
				DEFAULT_LOCALE);
		Date date = dateFormat.parse(time);
		return (int) (date.getTime() / 1000);

	}

	public static Integer format(String time, String format) throws Exception {

		Date date = new SimpleDateFormat(format, DEFAULT_LOCALE).parse(time);
		return (int) (date.getTime() / 1000);
	}

	public static void main(String[] args) {

		StringBuilder info = new StringBuilder("当前时间为：");
		long old = System.currentTimeMillis();
		info.append(getYear() + "-");
		info.append(getMonth() + "-");
		info.append(getDayOfMonth() + " ");
		info.append("星期" + getDayOfWeek() + " ");
		info.append(getHour() + ":");
		info.append(getMinute() + ":");
		info.append(getSecond() + " ");
		info.append("用时：" + (System.currentTimeMillis() - old) + "毫秒");
		System.out.println(info);
	}
}
